#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QDate>
#include <QString>
#include <QDebug>


MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //    setCentralWidget(ui->splitterMain);
    //状态栏初始化创建
    labCellIndex = new QLabel ("当前单元格坐标：", this);
    labCellIndex->setMinimumWidth(250);
    labCellType=new QLabel ("当前单元格类型：",this);
    labCellType->setMinimumWidth(200);
    labStudID=new QLabel ("学生ID: ", this);
    labStudID->setMinimumWidth(200);
    ui->statusbar->addWidget (labCellIndex) ; //加到状态栏
    ui->statusbar->addWidget(labCellType);
    ui->statusbar->addWidget(labStudID);
}

MainWindow::~MainWindow()
{
    delete ui;
}

/**
 * 设置表头
 * @brief MainWindow::on_pushButton_clicked
 */
void MainWindow::on_pushButton_clicked()
{
    QTableWidgetItem *headerItem;
    QStringList headerText;
    headerText <<"姓名"<<"性别"<<"出生日期"<<"民族"<<"分数"<<"是否党员";
    ui->tableWidget->setHorizontalHeaderLabels(headerText);
    ui->tableWidget->setColumnCount(headerText.count());
    ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
    for (int i=0;i<ui->tableWidget->columnCount();i++)
    {
        //cellItem =ui->tableWidget->horizontalHeaderItem(i);
        headerItem=new QTableWidgetItem(headerText.at(i));
        QFont font=headerItem->font();//获取原有字体设置
        font.setBold(true);//设置为粗体
        font.setPointSize(12);//字体大小
        headerItem->setTextColor(Qt::red);//字体颜色
        headerItem->setFont(font);//设置字体
        ui->tableWidget->setHorizontalHeaderItem(i,headerItem); //设置表头单元格的Item
    }
    //    ui->tableWidget->setItemDelegateForColumn(colScore,&spinDelegate);
}

/**
 * 初始化表格数据
 * @brief MainWindow::on_pushButton_4_clicked
 */
void MainWindow::on_pushButton_4_clicked()
{
    //初始化表格内容
    QString strName,strSex;
    bool isParty=false;
    QDate birth;
    birth.setDate(1980,4,7);//初始化一个日期
    ui->tableWidget->clearContents();//只清除工作区，不清除表头
    int Rows=ui->tableWidget->rowCount(); //数据区行数，
    for (int i=0;i<Rows;i++) //数据区第1行的编号为0，所以范围是0~rowCount()-1
    {
        strName = QString::asprintf("学生%d",i); //学生姓名
        // 分奇数，偶数行设置性别，及其图标
        if ((i % 2)==0){
            strSex= QString("Men");
        }else{
            strSex= QString("Women");
        }
        createItemsARow(i, strName, strSex, birth,QString("汉族"),isParty,70); //为某一行创建items
        birth=birth.addDays(20); // 日期加20天
        isParty =!isParty;
    }

}

void MainWindow::createItemsARow(int rowNo, QString Name,
                                 QString Sex, QDate birth,
                                 QString Nation, bool isPM,
                                 int score)
{
    // 为一行的单元格创建 Items
    QTableWidgetItem *item;
    QString str;
    uint StudID = 201605000; //学号基数
    // 姓名
    // 新建一个Item，设置单元格type为自定义的MainWindow::ctName
    item = new  QTableWidgetItem(Name,MainWindow::ctName);
    item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); //文本对齐格式
    StudID  +=rowNo; // 学号=基数+ 行号
    item->setData(Qt::UserRole,QVariant(StudID));  // 设置studID为data
    ui->tableWidget->setItem(rowNo,MainWindow::colName,item); // 为单元格设置Item
    // 性别
//    QIcon icon;
//    if (Sex=="Men")
//        icon.addFile(":/images/icons/boy.ico");
//    else
//        icon.addFile(":/images/icons/girl.ico");
    item=new QTableWidgetItem(Sex,MainWindow::ctSex); //新建一个Item，设置单元格type为自定义的 MainWindow::ctSex
//  item->setIcon(icon);
    item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);//为单元格设置Item
    ui->tableWidget->setItem(rowNo,MainWindow::colSex,item);//为单元格设置Item
    //出生日期
    str=birth.toString("yyyy-MM-dd"); //日期转换为字符串
    item=new  QTableWidgetItem(str,MainWindow::ctBirth);//新建一个Item，设置单元格type为自定义的 MainWindow::ctBirth
    item->setTextAlignment(Qt::AlignLeft | Qt::AlignVCenter); //文本对齐格式
    ui->tableWidget->setItem(rowNo,MainWindow::colBirth,item);//为单元格设置Item
    //民族
    item=new  QTableWidgetItem(Nation,MainWindow::ctNation); //新建一个Item，设置单元格type为自定义的 MainWindow::ctNation
    item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);//文本对齐格式
    ui->tableWidget->setItem(rowNo,MainWindow::colNation,item);//为单元格设置Item
    //是否党员
    item=new  QTableWidgetItem("党员",MainWindow::ctPartyM);//新建一个Item，设置单元格type为自定义的 MainWindow::ctPartyM
    item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);//文本对齐格式
    if (isPM)
        item->setCheckState(Qt::Checked);
    else
        item->setCheckState(Qt::Unchecked);
    item->setBackgroundColor(Qt::yellow);//Qt::green  lightGray  yellow
    ui->tableWidget->setItem(rowNo,MainWindow::colPartyM,item);//为单元格设置Item
    //分数
    str.setNum(score);
    item=new QTableWidgetItem(str,MainWindow::ctScore); //新建一个Item，设置单元格type为自定义的 MainWindow::ctPartyM
    item->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);//文本对齐格式
    ui->tableWidget->setItem(rowNo,MainWindow::colScore,item);//为单元格设置Item

}

// 设置行数
void MainWindow::on_pushButton_2_clicked()
{
    int localValue = ui->spinBox->value();
    if(localValue == 0){
        ui->tableWidget->setRowCount(10);
    }else{
        ui->tableWidget->setRowCount(localValue);
    }
}
// 插入行
void MainWindow::on_pushButton_5_clicked()
{
    //插入一行
    //int curRow;
    int curRow=ui->tableWidget->currentRow();//当前行号
    ui->tableWidget->insertRow(curRow); //插入一行，但不会自动为单元格创建item
    //为某一行创建items
    createItemsARow(curRow,"学生","Men",
        QDate::fromString("1990-1-1","yyyy-M-d"),
        "苗族",true,60 );
}

// 添加行
void MainWindow::on_pushButton_6_clicked()
{
    //添加一行
    //int curRow;
    int curRow=ui->tableWidget->rowCount();//当前行号
    ui->tableWidget->insertRow(curRow);//在表格尾部添加一行
    createItemsARow(curRow, "学生","Men",QDate::fromString("2000-1-1","yyyy-M-d"),"壮族",false,50 ); //为某一行创建items
}
// 删除当前行
void MainWindow::on_pushButton_7_clicked()
{
    //删除当前行及其items
    //int curRow;
    int curRow=ui->tableWidget->currentRow();//当前行号
    ui->tableWidget->removeRow(curRow); //删除当前行及其items
}

// 自动行高
void MainWindow::on_pushButton_3_clicked()
{
    ui->tableWidget->resizeRowsToContents();
}

// 自动列宽
void MainWindow::on_pushButton_8_clicked()
{
    ui->tableWidget->resizeRowsToContents();
}

// 表格是否可以编辑
void MainWindow::on_checkBox_clicked(bool checked)
{
    //设置编辑模式
    if (checked)
    //双击或获取焦点后单击，进入编辑状态
        ui->tableWidget->setEditTriggers(QAbstractItemView::DoubleClicked | QAbstractItemView::SelectedClicked);
    else
        ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers); //不允许编辑
}

// 间隔底色
void MainWindow::on_checkBox_2_clicked(bool checked)
{
    ui->tableWidget->setAlternatingRowColors(checked);
}

// 是否显示行表头
void MainWindow::on_checkBox_3_clicked(bool checked)
{
    //是否显示水平表头
    ui->tableWidget->horizontalHeader()->setVisible(checked);
}

// 是否显示列表头
void MainWindow::on_checkBox_4_clicked(bool checked)
{
    //是否显示垂直表头
    ui->tableWidget->verticalHeader()->setVisible(checked);
}

// 行选择
void MainWindow::on_radioButton_clicked(bool checked)
{
    ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
}

// 列选择
void MainWindow::on_radioButton_2_clicked(bool checked)
{
    ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectColumns);
}

// 读取表格内容
void MainWindow::on_pushButton_9_clicked()
{
    // 将 QTableWidget的所有行的内容提取字符串，显示在QPlainTextEdit里
    QString str;
    QTableWidgetItem *cellItem;
    ui->plainTextEdit->clear(); //文本编辑器清空
    for (int i=0;i<ui->tableWidget->rowCount();i++) //逐行处理
    {
        str=QString::asprintf("第%d行:",i+1);
        for (int j=0;j<ui->tableWidget->columnCount()-1;j++) //逐列处理，但最后一列是check型，单独处理
        {
            cellItem=ui->tableWidget->item(i,j); //获取单元格的item
            str=str+cellItem->text()+"  "; //字符串连接
        }
        cellItem=ui->tableWidget->item(i,colPartyM);  //最后一列，党员
        if (cellItem->checkState()==Qt::Checked)  //根据check状态显示文字
            str=str+"党员";
        else
            str=str+"群众";
        ui->plainTextEdit->appendPlainText(str); //添加到编辑框作为一行
    }
}
